滑动轨迹生成的思路和代码分享 |
您所在的位置:网站首页 › 滑块验证码破解思路 安卓下载 › 滑动轨迹生成的思路和代码分享 |
如有技术侵权、可联系本人下架 由于极验采用人工智能的方式对滑动的轨迹进行的验证,因此如果我们比较随意的生成鼠标滑动轨迹基本是肯定被封的,因此我们要详细分析一下鼠标轨迹的规律, 通之前介绍的调试手段,手工滑动滑块,获取到鼠标滑动轨迹的集合数组如下: [[-37,-41,0], [0,0,0], [3,0,251], [6,0,266], [9,0,283], [13,0,300], [15,0,316], [17,0,333], [19,0,349], [20,0,366], [20,0,383], [20,0,400], [20,0,430]]每个点的组成为:[x, y, timestamp],含义如下: x 坐标: 从0开始,一直到滑动结束, 每个坐标间隔越大说明滑动越快,静止不动就不变。 y 坐标: 可以为正,也可以为负数,都是个位数。取值范围: [-2, 2), 多取值0,次之是-1,极少的-2和正1 timestamp: 鼠标在当前点停留的时间(毫秒) 经反复测试得知还有如下规律: 滑动轨迹第一个坐标点(X,Y)是负数,其取值范围在(-40, -18) 第二个坐标点是0,0,0,从第三甚至第四个坐标点开始 y坐标的取值范围比较简单,人手横向滑动的轨迹一般负责先减少,在快速增加,再慢慢减少的轨迹。 因为y的取值比较简单,只考虑x坐标与z坐标的关系,将手工调试取10个坐标,以时间为X坐标,滑动距离为Y坐标,打印出来绘图为: 这样的图像很像我们之前采集的鼠标轨迹图像了。至此,鼠标滑动轨迹的X坐标生成方法就告一段落。剩下的是滑动时间的分配。 对上面十次滑动的坐标集合,计算出每个坐标点消耗的时间,对时间进行汇总,如下表: 统计分析结果如下: 80%~90%的X坐标在15~20毫秒之间 10%~15%在20~200及以上,其中[-a, 0, x, ...]这里x只有一个,取值在110~200之间坐标集最后3~5个坐标取值再50~400之间,最后一个坐标数值最大 至此,整理坐标生成的思路与流程如下: 整个滑块滑动时间分为三个部分,并根据统计的时间占比分配Z坐标: a. 滑动启动阶段,时间占总时间分配的1%~3% b. 快速滑动只目标区域阶段,时间占比位75%~90% c. 调整阶段,剩下的时间为调整阶段。 按照等分时间块的方式,通过上面tanh 和 arctan整合的轨迹图像生成X坐标和Y坐标。 最后,整理出相关示例代码如下: """ 用于生成坐标轨迹 """ import math import random import matplotlib.pyplot as plt import numpy as np import matplotlib as mpl class GTrace(object): def __init__(self): self.__pos_x = [] self.__pos_y = [] self.__pos_z = [] def __set_pt_time(self): """ 设置各节点的时间 分析不同时间间隔中X坐标数量的占比 统计结果: 1. 80%~90%的X坐标在15~20毫秒之间 2. 10%~15%在20~200及以上,其中 [-a, 0, x, ...] 这里x只有一个,取值在110~200之间 坐标集最后3~5个坐标取值再50~400之间,最后一个坐标数值最大 滑动总时间的取值规则: 图片宽度260,去掉滑块的宽度剩下200; 如果距离小于100,则耗时1300~1900之间 如果距离大于100,则耗时1700~2100之间 """ __end_pt_time = [] __move_pt_time = [] self.__pos_z = [] total_move_time = self.__need_time * random.uniform(0.8, 0.9) start_point_time = random.uniform(110, 200) __start_pt_time = [0, 0, int(start_point_time)] sum_move_time = 0 _tmp_total_move_time = total_move_time while True: delta_time = random.uniform(15, 20) if _tmp_total_move_time |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |